<?php

/**
 * Created by PhpStorm.
 * Author: ls
 * Time: 2023/11/6 15:06
 * Desc: 红包应用
 */
class Model_Api_V2_Marketing_Strategy_Envelope extends Contract_Api_Marketing_Strategy
{
    private static $instance = null;

    private $application_name = '领红包';

    private $application_code = 'red_envelope';

    private $icon = '&#xe63d;';

    public function __construct($type_id)
    {

    }

    /**
     * @param int $type_id
     * @param array $params
     * @return Model_Api_V2_Marketing_Strategy_Envelope|null
     */
    public static function get_instance(int $type_id, array $params = array())
    {
        // 没有登录不检查红包
        if (!isset($params['mid'])) {
            return null;
        }

        // 应用是否安装
        if (!St_Functions::is_normal_app_install('red_envelope')) {
            return null;
        }

        // 是否开启
        $is_envelope = DB::select()
            ->from('model')
            ->where('id', '=', $type_id)
            ->and_where('is_envelope', '=', 1)
            ->execute()
            ->get('is_envelope');
        if (empty($is_envelope)) {
            return null;
        }

        // 是否支持该产品类型
        $count = DB::select('id', 'money')
            ->from('envelope_member')
            ->where("find_in_set($type_id,typeids)")
            ->and_where('use', '=', 0)
            ->and_where('memberid', '=', $params['mid'])
            ->execute()
            ->count();
        if ($count == 0) {
            return null;
        }

        if (is_null(self::$instance)) {
            self::$instance = new self($type_id);
        }

        return self::$instance;
    }

    /**
     * 检查是否支持对应产品
     * 支持返回code和中文名称
     * 不支持返回 false
     * @param $product_id
     * @return array 二维数组，防止某些应用有多个标签
     */
    public function is_support($product_id)
    {
        return array(
            'code' => $this->application_code,
            'name' => $this->application_name,
            'icon' => $this->icon
        );
    }

}